package benzapp.pack;

import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;
import java.util.ListIterator;

import benzapp.db.DBHelper;
import benzapp.db.Distributore;
import benzapp.overlay.DistributoreOverlay;
import benzapp.overlay.ListaOverlay;
import benzapp.overlay.PosizioneOverlay;
import benzapp.overlay.RaggioRicercaOverlay;

import com.google.android.maps.GeoPoint;
import com.google.android.maps.MapActivity;
import com.google.android.maps.MapController;
import com.google.android.maps.MapView;
import com.google.android.maps.Overlay;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.database.sqlite.SQLiteException;
import android.graphics.Color;
import android.location.Address;
import android.location.Geocoder;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.os.AsyncTask;
import android.os.Bundle;
import android.provider.Settings;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.CompoundButton.OnCheckedChangeListener;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.ProgressBar;
import android.widget.TextView;
import android.widget.Toast;
import android.widget.ToggleButton;

/**
 * coordinate Trento LONG LAT: geo fix 11.119148 46.067038
 * 			  Roma: geo fix 12.494016 41.891863
 * 			  Sopramonte: geo fix 11.061208 46.074868
 * @author Michele Segata
 * */

public class BenzAppActivity extends MapActivity {
	
	private DBHelper dbHelper;
	private MapView mapView;
	private MapController mapController;
	private ListaOverlay listaOverlay;
	private List<Overlay> mapOverlays;
	private LocationManager locationManager;
	private LocationListener locationListener;
    final static String mocprovider = "mocprovider";
	private NetworkInfo networkInfo;
	private EditText et_indirizzo;
	private ProgressBar pb_ricerca_indirizzo;
	
	public final static int MODALITÀ_VISUALIZZA = 0;
    public final static int MODALITÀ_MODIFICA = 1;
	
	
    /**
     * @author Michele Segata
     * Called when the activity is first created
     */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        
        //Toast.makeText(getApplicationContext(), "onCreate()", Toast.LENGTH_SHORT).show();
        
        //inizializzazione componenti
        setContentView(R.layout.mappa);		//setto il layout
        
        dbHelper = new DBHelper(this, DBHelper.DB_NAME, null, DBHelper.DB_VERSION);		//creo un nuovo DBHelper
        
        mapView = (MapView)findViewById(R.id.mapview);		//prendo la mapview
        mapView.setBuiltInZoomControls(true);		//aggiungo i controlli per lo zoom
        mapController = mapView.getController();	//prendo il mapcontroller
        mapController.setZoom(16);		//setto il livello dell zoom a 16
        
        listaOverlay = new ListaOverlay(getResources().getDrawable(R.drawable.pompa), this);	//inizializzo la lista degli Overlay        
        mapOverlays = mapView.getOverlays();	//prendo gli overlay della mappa
        
        //prendo l'istanza del locationManager per gestire il cambio di posizione e PosizioneOverlay
        locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
        
        //creo il locationListener
        final BenzAppActivity activity = this;
        locationListener = new LocationListener() {
        	
        	private ArrayList<DistributoreOverlay> list;
			
			@Override
			public void onStatusChanged(String provider, int status, Bundle extras) {}
			
			@Override
			public void onProviderEnabled(String provider) {}
			
			@Override
			public void onProviderDisabled(String provider) {}
			
			@Override
			public void onLocationChanged(final Location location) {
				
				//Toast.makeText(activity, "locationListener", Toast.LENGTH_SHORT).show();
				
				//prendo il geopoint dalla location
				GeoPoint posizione = new GeoPoint((int) (location.getLatitude()*1E6), (int) (location.getLongitude()*1E6));
				
				//mi sposto nella posizione corrente
				mapController.animateTo(posizione);
				Log.i("New Position Lat:", String.valueOf(location.getLatitude()));
				Log.i("New Position Long:", String.valueOf(location.getLongitude()));
				
				//svuoto le liste degli overlay
				mapOverlays.clear();
				listaOverlay.clearList();
				
				//prendo nuova posizione corrente e la aggiungo agli overlay della mappa
				mapOverlays.add(new PosizioneOverlay(activity, posizione));
				mapOverlays.add(new RaggioRicercaOverlay(activity, posizione));
								
				//query dei distributori presenti in zona
				list = dbHelper.getNearestOveralys(posizione);
				
				//popolo la mappa con gli overlay
				if (list.size()>0) {
					listaOverlay.addOverlayList(list);
					mapOverlays.add(listaOverlay);
				}
				
				//aggiorno l'edittext dell'indirizzo in base alle coordinate della nuova posizione
				((BenzAppActivity) activity).aggiornaIndirizzo();
			}
		};
        
		//creo i menu delle activity e della mappa
        createMenuActivity();
        createMenuMappa();
        
    }
    
    
    @Override
	/**
	 * @author Michele Segata
	 */
	protected void onStart() {
		super.onStart();
		
		//Toast.makeText(getApplicationContext(), "onStart()", Toast.LENGTH_SHORT).show();
		
		//prendo il ConnectivityManager e mi faccio dare lo stato della connessione wireless
		ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
		boolean isWifiOn = false;
		
		if (cm!=null) {
			//controllo se la wifi è connessa o si sta connettendo
			networkInfo = cm.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
			//se false setto lo stato a false
			if(!networkInfo.isConnectedOrConnecting()){
				isWifiOn = false;
				Log.d("WIFIOFF", "Stato della WIFI: "+isWifiOn);
			}
			else{
				isWifiOn = true;
				Log.d("WIFION", "Stato della WIFI: "+isWifiOn);
			}			
		}
		
		//se wireless non connessa mostro dialog
		if (!isWifiOn) {
			AlertDialog.Builder dialog = new AlertDialog.Builder(this);
			dialog.setTitle("ATTENZIONE!");
			dialog.setMessage("Wireless non attivata o opzione 'Usa la rete' non selezionata. Vuoi attivarla ora?");
			dialog.setPositiveButton("OK", new DialogInterface.OnClickListener() {
				@Override
				public void onClick(DialogInterface dialog, int which) {
					// manda a pannello impostazioni
					activateConnection();
				}
			});			
			dialog.setNegativeButton("Annulla", new DialogInterface.OnClickListener() {
				@Override
				public void onClick(DialogInterface dialog, int which) {
					dialog.cancel();
				}
			});
			//mostro dialog
			AlertDialog alert = dialog.create();
			try {
				alert.show();
			} catch (Exception e) {
				Log.e("WindowManager", e.toString());
			}
		}		
	}
    
    
    @Override
	/**
	 * @author Michele Segata, Valentino Briani
	 */
	protected void onResume() {
		super.onResume();
		
		//Toast.makeText(getApplicationContext(), "onResume()", Toast.LENGTH_SHORT).show();
		
		//provo a creare il db se non esiste
        try {
        	dbHelper.createDataBase();
        } catch (Exception e) {
        	Log.e("DB", "Unable to create db");
        }
        
        //provo ad aprire il db
        try {
        	dbHelper.openDataBase();
        } catch (Exception e) {
        	Log.e("DB", "Unable to open db");
        	Toast.makeText(getApplicationContext(), "Errore nell'apertura del db", Toast.LENGTH_LONG).show();
        	finish();
        }
		
        
		//uso la connessione di rete per determinare la posizione corrente ogni minuto e se cambiata di almeno 50 metri
		locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 6000, 50, locationListener);
		
		//aggiungo e abilito il mock location provider
		if (locationManager.getProvider(mocprovider)==null)
			locationManager.addTestProvider(mocprovider/*LocationManager.NETWORK_PROVIDER*/, false, false, false, false, false, false, false, android.location.Criteria.POWER_LOW, android.location.Criteria.ACCURACY_FINE);
		locationManager.setTestProviderEnabled(mocprovider, true);
		
	}
    
    
    @Override
	/**
	 * @author Michele Segata, Valentino Briani
	 * Quando l'app viene messa in pausa vengono disabilitati gli aggiornamenti di posizione dalla rete e viene disattivata
	 * la posizione corrente
	 * */
	protected void onPause() {
		super.onPause();
		
		//Toast.makeText(getApplicationContext(), "onPause()", Toast.LENGTH_SHORT).show();
		
		//chiudo il database
		dbHelper.closeDataBase();
		
		//rimuovo gli aggiornamenti di posizione dal WiFi e dal mockprovider
		locationManager.removeUpdates(locationListener);
		if (locationManager.getProvider(mocprovider)!=null) {
			locationManager.setTestProviderEnabled(mocprovider, false);
			locationManager.removeTestProvider(mocprovider);
			locationManager.clearTestProviderLocation(mocprovider);
		}
		
	}
    
    
    @Override
	/**
	 * @author Michele Segata
	 */
	protected void onStop() {
		super.onStop();
		
		//Toast.makeText(getApplicationContext(), "onStop()", Toast.LENGTH_SHORT).show();
				
	}
    
    
    /**
     * @author Valentino Briani
     * Funzione che crea e gestisce il menu delle attività: quando viene ciccato un bottone viene richiamata la relativa Activity
     */
    private void createMenuActivity() {
    	
    	//Bottone della mappa, selezionato
    	Button button_mappa = (Button) findViewById(R.id.button_mappa);
    	button_mappa.setTextColor(Color.WHITE);
    	button_mappa.setBackgroundColor(Color.TRANSPARENT);
    	
    	//Bottone delle opzioni
    	Button button_opzioni = (Button) findViewById(R.id.button_opzioni);
        button_opzioni.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View arg0) {
				Intent intent = new Intent(getApplicationContext(), OpzioniActivity.class);
				intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
				startActivity(intent);
			}
		});
        
        //Bottone degli aiuti
        Button button_aiuto = (Button) findViewById(R.id.button_aiuto);
        button_aiuto.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View arg0) {
				Intent intent = new Intent(getApplicationContext(), AiutoActivity.class);
				intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
				startActivity(intent);
			}
		});
        
        //Bottone dei crediti
        Button button_crediti = (Button) findViewById(R.id.button_crediti);
        button_crediti.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View arg0) {
				Intent intent = new Intent(getApplicationContext(), CreditiActivity.class);
				intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
				startActivity(intent);
			}
		});
        
    }
    
    /**
     * @author Valentino Briani
     * Funzione che crea e gestisce il menu della mappa
     */
    private void createMenuMappa() {
    	//checkbox che abilita il menu della mappa, il puntatore e il pannello dell'indirizzo
    	final CheckBox cb_menu = (CheckBox) findViewById(R.id.checkBox_menu);
    	
    	//pannello e bottoni del menu
    	final View v_menu = (View) findViewById(R.id.layout_menu);
    	final ToggleButton tb_posizionamento_automatico = (ToggleButton) findViewById(R.id.toggleButton_posizionamento_automatico);
    	final ImageButton ib_nuova_posizione = (ImageButton) findViewById(R.id.imageButton_nuova_posizione);
    	
    	//puntatore per il posizionamento manuale
    	final ImageView iv_puntatore = (ImageView) findViewById(R.id.imageView_puntatore);
    	
    	//pannello, edittext e progressbar dell'indirizzo
    	final View v_indirizzo = (View) findViewById(R.id.layout_indirizzo);
    	et_indirizzo = (EditText) findViewById(R.id.editText_indirizzo);
    	pb_ricerca_indirizzo = (ProgressBar) findViewById(R.id.progressBar_ricerca_indirizzo);
    	
    	//checkbox del menu: rende visibili/invisibili il menu della mappa, il puntatore e il pannello dell'indirizzo
    	cb_menu.setOnCheckedChangeListener(new OnCheckedChangeListener() {
			@Override
			public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
				if (isChecked) {
					v_menu.setVisibility(View.VISIBLE);
					iv_puntatore.setVisibility(View.VISIBLE);
					v_indirizzo.setVisibility(View.VISIBLE);
					//aggiorno l'indirizzo nell'edittext in base alle coordinate del puntatore
					aggiornaIndirizzo();
				} else {
					v_menu.setVisibility(View.INVISIBLE);
					iv_puntatore.setVisibility(View.INVISIBLE);
					v_indirizzo.setVisibility(View.GONE);
				}
			}
		});
    	
    	//togglebutton del posizionamento automatico: abilita/disabilita gli aggiornamenti della posizione tramite WiFi
    	tb_posizionamento_automatico.setOnCheckedChangeListener(new OnCheckedChangeListener() {
			@Override
			public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
				if (isChecked) {
					
					locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 60000, 50, locationListener);
										
				} else {
				
					locationManager.removeUpdates(locationListener);
				
				}
			}
		});
    	
    	//button del posizionamento manuale: posiziona manualmente al centro della mappa e disabilita il posizionamento automatico
    	ib_nuova_posizione.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				tb_posizionamento_automatico.setChecked(false);
				GeoPoint posizione = mapView.getMapCenter();
				Location location = new Location(mocprovider);
				location.setLatitude(posizione.getLatitudeE6()/1E6);
				location.setLongitude(posizione.getLongitudeE6()/1E6);
				location.setTime(System.currentTimeMillis());
								
				locationManager.requestSingleUpdate(mocprovider, locationListener, null);
				locationManager.setTestProviderLocation(mocprovider, location);
								
			}
		});
    	
    }
    
    /**
     * @author Valentino Briani
     * Funzione che aggiorno l'indirizzo nell'edittext in base alle coordinate del puntatore
     */
    public void aggiornaIndirizzo() {
    	//faccio il goecoding solo se l'edittext dell'indirizzo è visibile e se c'è la connesione
    	if (et_indirizzo.getVisibility()==View.VISIBLE && networkInfo!=null && networkInfo.isConnected()) {
    		new AsyncTask<Void, Void, Indirizzo>() {
    			Geocoder geocoder = new Geocoder(BenzApp.getAppContext());
    			GeoPoint posizione;
    			List<Address> indirizzi;
    			
    			@Override
    			protected void onPreExecute() {
    				super.onPreExecute();
    				//rendo visibile la progressbar
    				pb_ricerca_indirizzo.setVisibility(View.VISIBLE);
    			}
    			
    			@Override
    			//in un thread separato 
    			protected Indirizzo doInBackground(Void... params) {
    				try {
    					//attende un secondo, in modo che non ci siano più spostamenti sulla mappa
						Thread.sleep(1000);
					} catch (InterruptedException e) {
						Log.e("aggiornamento indirizzo", "errore durante la sleep: " + e.toString());
					}
    				//prendo le coordinate al centro della mappa
    				posizione = mapView.getMapCenter();
    				try {
    					//tramite il geocoder recupero gli indirizzi corrispondenti alla posizione
    					indirizzi = geocoder.getFromLocation(posizione.getLatitudeE6()/1E6, posizione.getLongitudeE6()/1E6, 1);    					
    					int x = 0;
        				ListIterator<Address> i = indirizzi.listIterator();
        				while (i.hasNext()) {
        					Log.i("address"+x, i.next().toString());
        					x++;
        				}    					
    				} catch (IOException e) {
    					Log.w("Geocoding posizione", "Ricerca indirizzo non riuscita: errore");
    				}
    				
    				//se ci sono risultati li passo
    				if (indirizzi!=null && indirizzi.size()>0) {
    					return new Indirizzo(indirizzi.get(0));
    				}
    				else
    					return null;
    			}
    			
    			@Override
    			protected void onPostExecute(Indirizzo indirizzo) {
    				//nascondo la progressbar
    				pb_ricerca_indirizzo.setVisibility(View.INVISIBLE);    				
    				//se ci sono risultati aggiorno l'edittext
    				if (indirizzo!=null)
    					et_indirizzo.setText(indirizzo.toString());
    				else
    					et_indirizzo.setText("Ricerca indirizzo non riuscita: errore");
    			}
    		}.execute();
    	} else
    		et_indirizzo.setText("Ricerca indirizzo non riuscita: stato offline");
    }
    
    
	@Override
	protected boolean isRouteDisplayed() {
		// TODO Auto-generated method stub
		return false;
	}
	
	
	@Override
	/**
	 * Quando viene premuto il tasto BACK l'applicazione viene terminata
	 * @author Michele Segata
	 * */
	public void onBackPressed() {
		
		//creo dialog per chiedere conferma uscita app
		AlertDialog.Builder dialog=new AlertDialog.Builder(this);
		dialog.setTitle("Uscita");
		dialog.setMessage("Vuoi uscire da BenzApp?");
		dialog.setPositiveButton("Si", new DialogInterface.OnClickListener() {
			
			@Override
			public void onClick(DialogInterface dialog, int which) {
				locationManager.removeUpdates(locationListener);
				finish();
			}
		});
		
		dialog.setNegativeButton("No", new DialogInterface.OnClickListener() {
			
			@Override
			public void onClick(DialogInterface dialog, int which) {
				// TODO Auto-generated method stub
				dialog.cancel();
			}
		});
		
		//mostro dialog
		AlertDialog alert=dialog.create();
		alert.show();
		
	}
	
	/**
	 * @author Michele Segata
	 * metodo che fa partire l'Intent che apre l'Activity delle impostazioni
	 * */
	
	private void activateConnection() {
		Intent intent = new Intent(Settings.ACTION_SETTINGS);
		startActivity(intent);
	}
	
	
	/**
	 * @author Valentino Briani
	 * @param modalità: il compito del dialog
	 * @param distributore: il distributore mostrato dal dialog
	 * Funzione che crea un dialog con i prezzi relativi al distributore, in base alla modalità
	 */
	public void showDistributoreDialog(int modalità, final Distributore distributore) {
		AlertDialog.Builder builder = new AlertDialog.Builder(this);
		LayoutInflater inflater = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE);
		
		switch (modalità) {
		
		//il dialog visualizza solamente i prezzi
		case MODALITÀ_VISUALIZZA:
			
			//Toast.makeText(getApplicationContext(), "id = " + distributore.getId() + ", Descrizione = " + distributore.getDescrizione(), Toast.LENGTH_LONG).show();
			
			//setto il layout
			View layout = inflater.inflate(
					R.layout.dialog_visualizza_distributore,
					(ViewGroup) findViewById(R.id.layout_root));
			builder.setView(layout);
			
			//prendo i campi di testo
			final EditText et_benzina = (EditText) layout.findViewById(R.id.editText_benzina);
			final EditText et_diesel = (EditText) layout.findViewById(R.id.editText_diesel);
			final EditText et_gpl = (EditText) layout.findViewById(R.id.editText_gpl);
			final EditText et_metano = (EditText) layout.findViewById(R.id.editText_metano);
			
			//setto i prezzi nei relativi campi
			et_benzina.setText(String.valueOf(distributore.getBenzina()));
			et_diesel.setText(String.valueOf(distributore.getDiesel()));
			et_gpl.setText(String.valueOf(distributore.getGpl()));
			et_metano.setText(String.valueOf(distributore.getMetano()));
			
			//setto il campo della data dell'ultimo aggiornamento dei prezzi del distributore
			TextView tv_aggiornamento = (TextView) layout.findViewById(R.id.textView_data_aggiornamento);
			tv_aggiornamento.setText(distributore.getAggiornamento()!=null && distributore.getAggiornamento().trim().compareTo("")!=0 ? distributore.getAggiornamento() : "-");
			
			//se si seleziona Modifica, creo un dialog pre la modifica
			builder.setPositiveButton(R.string.Modifica, new DialogInterface.OnClickListener() {				
				@Override
				public void onClick(DialogInterface dialog, int id) {
					showDistributoreDialog(MODALITÀ_MODIFICA, distributore);
					dialog.cancel();
				}
			});			
			//se si seleziona Esci, chiudo il dialog
			builder.setNegativeButton(R.string.Esci, new DialogInterface.OnClickListener() {				
				@Override
				public void onClick(DialogInterface dialog, int id) {
					dialog.cancel();
				}
			});
			
			//setto titolo e icona
			builder.setCancelable(true)
			.setTitle(distributore.getDescrizione())
			.setIcon(R.drawable.pompa);
			
			break;
			
		//il dilog permette di modificare i prezzi
		case MODALITÀ_MODIFICA:
			
			//setto il layout
			View layout2 = inflater.inflate(
					R.layout.dialog_modifica_distributore,
					(ViewGroup) findViewById(R.id.layout_root));
			builder.setView(layout2);
			
			//prendo i campi di testo
			final EditText et_benzina2 = (EditText) layout2.findViewById(R.id.editText_benzina);
			final EditText et_diesel2 = (EditText) layout2.findViewById(R.id.editText_diesel);
			final EditText et_gpl2 = (EditText) layout2.findViewById(R.id.editText_gpl);
			final EditText et_metano2 = (EditText) layout2.findViewById(R.id.editText_metano);
			
			//setto i prezzi nei relativi campi
			et_benzina2.setText(String.valueOf(distributore.getBenzina()));
			et_diesel2.setText(String.valueOf(distributore.getDiesel()));
			et_gpl2.setText(String.valueOf(distributore.getGpl()));
			et_metano2.setText(String.valueOf(distributore.getMetano()));
			
			//se si seleziona Conferma, se corretti salvo i nuovi valori  e ritorno al dialog di viusalizzazione
			builder.setPositiveButton(R.string.Conferma, new DialogInterface.OnClickListener() {				
				@Override
				public void onClick(DialogInterface dialog, int id) {
					try {
						//prendo i valori dei campi
						String benzina = et_benzina2.getText().toString();
   						String diesel = et_diesel2.getText().toString();
   						String gpl = et_gpl2.getText().toString();
   						String metano = et_metano2.getText().toString();
   						   						
   						//formatto data e ora dell'ultimo aggiornamento
   						Calendar currentDate = Calendar.getInstance();
   						SimpleDateFormat data= new SimpleDateFormat("d/MM/yyyy");
   						SimpleDateFormat ora= new SimpleDateFormat("H:mm");   						   						
   						String dateNow = data.format(currentDate.getTime())+" alle "+ora.format(currentDate.getTime());
   						Log.d("Update","Aggiornato alle:"+dateNow);
   						
   						//aggiorno i prezzi (massimo tre cifre decimali) nel distributore
   						distributore.setBenzina(new Float(benzina.substring(0, benzina.length() > 5 ? 5 : benzina.length())));
   						distributore.setDiesel(new Float(diesel.substring(0, diesel.length() > 5 ? 5 : diesel.length())));
   						distributore.setGpl(new Float(gpl.substring(0, gpl.length() > 5 ? 5 : gpl.length())));
   						distributore.setMetano(new Float(metano.substring(0, metano.length() > 5 ? 5 : metano.length())));
   						distributore.setAggiornamento(dateNow);
   						
   						//salvo i nuovi valori nel database
   						dbHelper.aggiornaDistributore(distributore);
   						
   						//torno al dialog di visualizzazione
   						showDistributoreDialog(MODALITÀ_VISUALIZZA, distributore);
   						dialog.cancel();
   						Toast.makeText(getApplicationContext(), "Prezzi aggiornati correttamente", Toast.LENGTH_LONG).show();
					} catch (NumberFormatException e) {
						//errore nel valori inseriti, ritorno all'inserimento
						showDistributoreDialog(MODALITÀ_MODIFICA, distributore);
   						dialog.cancel();
						Toast.makeText(getApplicationContext(), "Prezzi inseriti non corretti o mancanti", Toast.LENGTH_LONG).show();
					} catch (SQLiteException e) {
						//errore nel salvataggio nel db dei nuovi valori, ritorno all'inserimento
						showDistributoreDialog(MODALITÀ_MODIFICA, distributore);
   						dialog.cancel();
						Toast.makeText(getApplicationContext(), "Errore durante l'aggiornamento dei prezzi nel db", Toast.LENGTH_LONG).show();
					}
				}
			});
			//se si Annulla, torno alla visualizzazione
			builder.setNegativeButton(R.string.Annulla, new DialogInterface.OnClickListener() {				
				@Override
				public void onClick(DialogInterface dialog, int id) {
					showDistributoreDialog(MODALITÀ_VISUALIZZA, distributore);
					dialog.cancel();
				}
			});
			
			//setto titolo e icona
			builder.setCancelable(true)
			.setTitle(distributore.getDescrizione())
			.setIcon(R.drawable.pompa);
			
			break;
		default:
			break;
		}
		
		//creo il dialog
		AlertDialog alert = builder.create();
		try {
			alert.show();
		} catch (Exception e) {
			Log.e("Mostra Dialog", e.toString());
		}
	}
	
	
	
	
}